#include "head.h"

// 执行数据库操作的SQL语句
int execSql(sqlite3 *db, char *pSql)
{
     // sqlite3_exec函数用来执行SQL语句
     // 参数
     // 1. 数据库的指针
     // 2. SQL语句
     // 3. 函数指针，当SQL执行完成后会调用该函数，一般写成0
     // 4. 第三个参数指定的函数的参数，一般写成0
     // 5. 错误信息
     char *msg = NULL;
     sqlite3_exec(db, pSql, 0, 0, &msg);
     // 如果msg不为空，说明有错误信息
     if (msg != NULL)
     {
          printf("执行SQL语句失败 %s 错误的原因是：%s\n", pSql, msg);
          return -1;
     }
     return 1;
}

// 执行查询的SQL语句
int querySql(sqlite3 *db, char *pSql, QUREY_RST *pQR)
{
     // sqlite3_get_table获取数据库表格的内容，通常用来执行数据库查询SQL语句
     // 参数
     // 1. 数据库的指针
     // 2. 要执行的SQL查询语句
     // 3. 查询的结果
     // 4. 查询结果的行数
     // 5. 查询结果的列数
     // 6. 错误信息

     char *msg = NULL;
     int data = sqlite3_get_table(db, pSql, &pQR->pzResult, &pQR->row, &pQR->col, &msg);

     if (msg != NULL)
     {
          printf("查询数据库失败，SQL语句是：%s 原因是：%s\n", pSql, msg);
          return -1;
     }
     else
     {
          // printf("row = %d col = %d result = %s\n", pQR->row, pQR->col, pQR->pzResult[1 + 4]);

          // for (size_t i = 0; i < ((pQR->col)*(pQR->col)); i++)
          // {
          //      // 打印查询的结果，+4是为了跳过结果的表头
          //      printf("%s  ", pQR->pzResult[i + 4]);
          // }
          // printf("\n");
          return 1;
     }
}

sqlite3 *openSqlite3(char *pName)
{
     sqlite3 *db = NULL; // 定义一个sqlite3的数据库指针
     int data = -1;

     // 打开指定的数据库文件，如果不存在将创建一个同名的数据库文件
     // 打开或者创建一个数据库，名字叫test.db，并且把数据用指针db保存
     data = sqlite3_open(pName, &db);
     if (data < 0)
     {
          printf("create testsqlite failure:%s\n", sqlite3_errmsg(db)); // 创建失败
     }
     return db;
}

void closeDB(sqlite3 *pDB)
{
     sqlite3_close(pDB);
}
